package org.example.component;

import org.example.vo.PayInfoVO;

/**
 * @description: 上下文类，根据构造器传入的对象名称，生成对应的对象，并可以调用该对象具体策略
 * @author: 谢超
 * @date: 2024/8/21 10:51
 */
public class PayStrategyContext {

    private PayStrategy payStrategy;

    public PayStrategyContext(PayStrategy payStrategy) {
        this.payStrategy = payStrategy;
    }

    /**
     * 根据策略对象，执行不同的下单接口
     * @param payInfoVO
     * @return
     */
    public String executeUnifiedOrder(PayInfoVO payInfoVO) {
        return payStrategy.unifiedOrder(payInfoVO);
    }

    /**
     * 根据策略对象，执行不同的退款接口
     * @param payInfoVO
     * @return
     */
    public String executeRefund(PayInfoVO payInfoVO) {
        return payStrategy.refund(payInfoVO);
    }

    /**
     * 根据策略对象，执行不同的下单接口
     * @param payInfoVO
     * @return
     */
    public String executeCloseOrder(PayInfoVO payInfoVO) {
        return payStrategy.closeOrder(payInfoVO);
    }

    /**
     * 根据策略对象，执行不同的查询下单状态接口
     * @param payInfoVO
     * @return
     */
    public String executeQueryPayStatus(PayInfoVO payInfoVO) {
        return payStrategy.queryPayStatus(payInfoVO);
    }
}
